﻿<%@ Application Language="C#" %>

<script runat="server">


    //在安全模块建立起当前用户的有效的身份时，该事件被触发。在这个时候，用户的凭据将会被验证。
    protected void Application_AuthenticateRequest(object sender, EventArgs e)
    {
        HttpApplication app = (HttpApplication)sender;
        HttpContext ctx = app.Context; //获取本次Http请求的HttpContext对象 
        if (ctx.User != null)
        {
            if (ctx.Request.IsAuthenticated == true) //验证过的一般用户才能进行角色验证 
            {
                System.Web.Security.FormsIdentity fi = (System.Web.Security.FormsIdentity)ctx.User.Identity;
                System.Web.Security.FormsAuthenticationTicket ticket = fi.Ticket; //取得身份验证票 
                string userData = ticket.UserData;//从UserData中恢复role信息
                string[] roles = userData.Split(','); //将角色数据转成字符串数组,得到相关的角色信息 
                ctx.User = new System.Security.Principal.GenericPrincipal(fi, roles); //这样当前用户就拥有角色信息了
            }
        }
    }
    void Application_Start(object sender, EventArgs e)
    {
        // 在应用程序启动时运行的代码

    }

    void Application_End(object sender, EventArgs e)
    {
        //  在应用程序关闭时运行的代码

    }

    void Application_Error(object sender, EventArgs e)
    {
        Response.Write("<b>");
        Response.Write("Web程序中未经出路的上一个异常如下!</b><br/>");
        Response.Write(Server.GetLastError().Message.ToString()+"<hr/");
        Response.Write(Server.GetLastError().ToString());
        //清楚所有异常
        Server.ClearError();
        // 在出现未处理的错误时运行的代码

    }

    void Session_Start(object sender, EventArgs e)
    {
        // 在新会话启动时运行的代码

    }

    void Session_End(object sender, EventArgs e)
    {
        // 在会话结束时运行的代码。 
        // 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
        // InProc 时，才会引发 Session_End 事件。如果会话模式设置为 StateServer
        // 或 SQLServer，则不引发该事件。

    }

</script>
